package pierwszy;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class SkladkaZus {
	static WebDriver driver;
    static WebDriverWait wait;
    
    private String PortalLink = "http://www.bermar2.home.pl/ks_portal/login.php";
    private String login = "p.jaworek";
    private String password = "jawso98*";
    
	private String site = "ks_portal";
	private String iconPlusOptionCheck = "Płatności";
	private String iconPlusOption = " Składkę zus ";   
	private String iloscSkladekZusPrzedUsunieciem = "";
	private String iloscSkladekZusPoUsunieciu = "";
	
	private KsPortalPage KSP;
	
	private Map<String,String> DaneSkladkaZus = new LinkedHashMap<String,String>();
	private Map<String,String> ZmodyfikowaneDaneSkladkaZus = new LinkedHashMap<String,String>();
	
    @BeforeClass
    void setUp() {
    	System.out.println("Przed klasą");
        driver = new FirefoxDriver();
        wait = new WebDriverWait(driver,10);
        driver.manage().window().maximize();
        //driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        
		DaneSkladkaZus.put("Rok", "2013");
		DaneSkladkaZus.put("Numer", "10");
		DaneSkladkaZus.put("Płatnik", "Adam Kowalski");
		DaneSkladkaZus.put("Kwota do zapłaty składka 51", "1000.10");
		DaneSkladkaZus.put("Kwota do zapłaty składka 52", "2000.01");
		DaneSkladkaZus.put("Kwota do zapłaty składka 53", "3000.22");
		DaneSkladkaZus.put("Do kiedy zapłacić", "2014-12-31");
		DaneSkladkaZus.put("Firma", "Bermar Firma Test");
		DaneSkladkaZus.put("Uwagi", "Testowa skladka Zus.");
		DaneSkladkaZus.put("Zlecenia", "Czynność niepowiązana");//Powiąż z istniejącym zleceniem, 
		DaneSkladkaZus.put("Typ wpłaty", "Egzekucja");
		DaneSkladkaZus.put("Miesiąc", "09");
		
		Float sumaSkladek = Float.parseFloat(DaneSkladkaZus.get("Kwota do zapłaty składka 51")) + Float.parseFloat(DaneSkladkaZus.get("Kwota do zapłaty składka 52"))+ Float.parseFloat(DaneSkladkaZus.get("Kwota do zapłaty składka 53"));
		
		DaneSkladkaZus.put("Suma składek", sumaSkladek.toString());
        
        ZmodyfikowaneDaneSkladkaZus.put("Rok", "2012");
        ZmodyfikowaneDaneSkladkaZus.put("Numer", "11");
        ZmodyfikowaneDaneSkladkaZus.put("Płatnik", "Anna Kowalska");
        ZmodyfikowaneDaneSkladkaZus.put("Kwota do zapłaty składka 51", "2000.11");
        ZmodyfikowaneDaneSkladkaZus.put("Kwota do zapłaty składka 52", "3000.44");
        ZmodyfikowaneDaneSkladkaZus.put("Kwota do zapłaty składka 53", "4000.33");
        ZmodyfikowaneDaneSkladkaZus.put("Do kiedy zapłacić", "2011-11-11");
        ZmodyfikowaneDaneSkladkaZus.put("Firma", "Bermar NGO Test");
        ZmodyfikowaneDaneSkladkaZus.put("Uwagi", "Testowa zmodyfikowana skladka Zus.");
        ZmodyfikowaneDaneSkladkaZus.put("Zlecenia", "Czynność niepowiązana");//Powiąż z istniejącym zleceniem, 
        ZmodyfikowaneDaneSkladkaZus.put("Typ wpłaty", "Składka dłuższa niż 1 miesiąc");
        ZmodyfikowaneDaneSkladkaZus.put("Miesiąc", "11");
		
		Float zmodyfikowanaSumaSkladek = Float.parseFloat(ZmodyfikowaneDaneSkladkaZus.get("Kwota do zapłaty składka 51")) + Float.parseFloat(ZmodyfikowaneDaneSkladkaZus.get("Kwota do zapłaty składka 52"))+ Float.parseFloat(ZmodyfikowaneDaneSkladkaZus.get("Kwota do zapłaty składka 53"));
		
		ZmodyfikowaneDaneSkladkaZus.put("Suma składek", zmodyfikowanaSumaSkladek.toString());
		
    	driver.get(PortalLink);
    }
    
    @AfterClass
    static void tearDown() {
    	System.out.println("Za klasą");
    	//driver.quit();
        //driver.close();
    }
    
    @BeforeMethod
    void setUpTest(){
    	System.out.println("Przed metodą testową");
    }
    
    @AfterMethod
    void tearDownTest(){
    	System.out.println("Za metodą testowa");
    }
    
    @Test
	public void dodajSkladkeZus(){	
    	//Log in
		LogInPage Login = new LogInPage(driver, wait); 
		MainPage MP = Login.logIn(login,password);
				
		//Choose and Check KsPortal site	
		KSP = MP.chooseSite(site);
		
		//Check if KsPortal was chosen.
		wait.until(ExpectedConditions.presenceOfElementLocated(UiMapping.passSelectedSite(site)));
		assert driver.findElement(UiMapping.passSelectedSite(site)).getText().trim().equals(site) : "Site " + site + " was not chosen.";
		
		//Choose and Check IconPlusOption (Employee)
		KSP.getOptionFromIconPlus(iconPlusOption);
				
		//Check if SkladkaZus option was chosen.
		wait.until(ExpectedConditions.presenceOfElementLocated(UiMapping.IconPlusCheck));
		assert driver.findElement(UiMapping.IconPlusCheck).getText().equals(iconPlusOptionCheck) : "Option " + iconPlusOption + " was not chosen.";
   
		KSP.wypelnijSkladkeZus(DaneSkladkaZus, false);
		
		assert KSP.zatwierdzSkladkeZus(DaneSkladkaZus): "Komunikat jest niezgodny!";
    }
    
    @Test (dependsOnMethods = "dodajSkladkeZus")
    void sprawdzSkladkeZus(){
    	assert KSP.sprawdzPolaSkladkaZus(DaneSkladkaZus): "Dane wprowadzone i odczytane sa niezgodne";
		
    }
    
    @Test(dependsOnMethods = "sprawdzSkladkeZus")
    public void sprawdzOstatniaSkladkeZus(){
		KSP.znajdzOstatnieZlecenieSkladke("SkladkaZus");	
		assert KSP.sprawdzOstatniaSkladkeZus(DaneSkladkaZus);
		
		iloscSkladekZusPrzedUsunieciem = KSP.pobierzIloscZlecenUsSkladekZus();
    }
    
    @Test (dependsOnMethods = "sprawdzOstatniaSkladkeZus")
    public void usunSkladkeZus(){
		KSP.usunZlecenieUSSkladkeZus(KSP.getTranslationId());
		
		iloscSkladekZusPoUsunieciu = KSP.pobierzIloscZlecenUsSkladekZus();

		assert (Integer.parseInt(iloscSkladekZusPrzedUsunieciem)-Integer.parseInt(iloscSkladekZusPoUsunieciu)==1): "Skladka zus nie zostala usunieta!";
    }
    
    @Test (dependsOnMethods = "usunSkladkeZus")
    public void sprawdzWszystkieFirmy(){
    	List<WebElement> listaFirm;
    	String [] polaFirmy;
    	//Choose and Check IconPlusOption (Employee)
    	KSP.getOptionFromIconPlus(iconPlusOption);
    					
   		//Check if SkladkaZus option was chosen.
 		wait.until(ExpectedConditions.presenceOfElementLocated(UiMapping.IconPlusCheck));
   		assert driver.findElement(UiMapping.IconPlusCheck).getText().equals(iconPlusOptionCheck) : "Option " + iconPlusOption + " was not chosen.";
    	   
   		listaFirm = KSP.pobierzListeFirm();
   		System.out.println("Ilość firm: " + listaFirm.size());
   		
   		for (WebElement f : listaFirm){
   	   		//KSP.pobierzListeFirm();
   			polaFirmy = KSP.wybierzFirme(f);
   	   		KSP.zatwierdzWybor();
   	   		assert KSP.sprawdzWybor(polaFirmy): "Nazwa i/lub nip wybranej firmy sa niezgodne!";
   	   	KSP.pobierzListeFirm();
   		}
    }
    
    @Test (dependsOnMethods = "sprawdzWszystkieFirmy")
    public void modyfikujSkladkeZus(){
    	int ID = 17;
		//Choose and Check IconPlusOption (Employee)
		KSP.getOptionFromIconPlus(iconPlusOption);
				
		//Check if SkladkaZus option was chosen.
		wait.until(ExpectedConditions.presenceOfElementLocated(UiMapping.IconPlusCheck));
		assert driver.findElement(UiMapping.IconPlusCheck).getText().equals(iconPlusOptionCheck) : "Option " + iconPlusOption + " was not chosen.";
   
		assert KSP.znajdzSkladkeZusPoId(ID): "Nie znaleziono skladki o " + ID;
		
		KSP.modyfikujSkladkeZus();
		
		KSP.wypelnijSkladkeZus(ZmodyfikowaneDaneSkladkaZus, true);
		
		assert KSP.zatwierdzZmodyfikowanaSkladkeZus(ZmodyfikowaneDaneSkladkaZus): "Komunikat jest niezgodny!";
    	
		assert KSP.znajdzSkladkeZusPoId(ID): "Nie znaleziono skladki o " + ID;
		
		assert KSP.sprawdzPolaSkladkaZus(ZmodyfikowaneDaneSkladkaZus): "Dane wprowadzone i odczytane sa niezgodne";
    }
}
